﻿namespace StockSharp.Algo.Indicators.Misc
{
	using System.ComponentModel;

	/// <summary>
	/// Сумма N последних значений.
	/// </summary>
	[DisplayName("Сумма")]
	[Description("Сумма N последних значений.")]
	public class Sum : LengthIndicator<decimal>
	{
		/// <summary>
		/// Создать <see cref="Sum"/>.
		/// </summary>
		public Sum()
			: base(typeof(decimal))
		{
		}

		/// <summary>
		/// Обработать входное значение.
		/// </summary>
		/// <param name="input">Входное значение.</param>
		/// <returns>Результирующее значение.</returns>
		protected override decimal OnProcess(IIndicatorValue input)
		{
			var newValue = input.GetValue<decimal>();
			var lastValue = this.GetCurrentValue();

			Buffer.Add(newValue);

			if (Buffer.Count > Length)
			{
				var retVal = lastValue + newValue - Buffer[0];
				Buffer.RemoveAt(0);
				return retVal;
			}
			else
			{
				return lastValue + newValue;
			}
		}
	}
}